// 这里的vm，就是我们在vue文件里面的this，所以我们能在这里获取vuex的变量，比如存放在里面的token

import { getToken } from '@/utils/token';
import { GlobalApi } from '@/constants';

// 同时，我们也可以在此使用getApp().globalData，如果你把token放在getApp().globalData的话，也是可以使用的
const setupHttpInterceptor = (app) => {
  uni.$u.http.setConfig({
    baseUrl: GlobalApi,
    // 如果将此值设置为true，拦截回调中将会返回服务端返回的所有数据response，而不是response.data
    // 设置为true后，就需要在this.$u.http.interceptor.response进行多一次的判断，请打印查看具体值
    // originalData: true,
    // 设置自定义头部content-type
    header: {},
  });
  // 请求拦截，配置Token等参数
  uni.$u.http.interceptor.request = (config) => {
    const token = getToken();
    if (token) {
      config.header = { ...config.header, Authorization: token };
    }
    return config;
  };
  // 响应拦截，判断状态码是否通过
  uni.$u.http.interceptor.response = (res) => {
    if (res.code) {
      // throw new Error(res.message || "请求失败");
      return false;
    }

    // 如果把originalData设置为了true，这里得到将会是服务器返回的所有的原始数据
    if (res.hasOwnProperty('result')) {
      // 如果把originalData设置为了true，这里return回什么，this.$u.post的then回调中就会得到什么
      return res.result;
    } else return res;
  };
};

export { setupHttpInterceptor };
